package com.atguigu.gmall.search.controller;

import com.atguigu.gmall.common.bean.ResponseVo;
import com.atguigu.gmall.pms.entity.AttrEntity;
import com.atguigu.gmall.search.service.SearchService;
import com.atguigu.gmall.search.vo.QueryParamVo;
import com.atguigu.gmall.search.vo.SearchResponseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

@Controller
@RequestMapping("search")
public class SearchController {
    @Autowired
    SearchService searchService;
    /*
    Controller方法返回值有以下几个情况：
        1、 如果Controller上使用了@RestController注解
            或者 Controller上使用了@Controller注解 方法上使用了@ResponseBody注解

            方法的返回值会被Jackson转为json字符串响应
        2、使用了@Controller注解  方法上没有使用@ResponseBody注解
            方法的返回值会被当做视图进行解析
                - 2.1 如果返回值是以redirect：开始，会被当做重定向视图 给前端一个重定向的响应并访问redirect：后的地址
                - 2.2 如果返回值不以redirect：开始，当做转发视图 根据配置的视图解析路径前缀后缀拼接路径查找页面转发给前端显示
     */
    @GetMapping
    public String search(QueryParamVo queryParamVo , Model model){
        //执行查询es中数据的业务
        SearchResponseVo responseVo = searchService.search(queryParamVo);
        /*
            request域：请求域 一次请求期间共享数据
            session域：会话域  一次会话期间共享数据
                    (浏览器默认将会话对象的key[jsessionid]保存在浏览器的运行内存中，浏览器关闭内存释放)
            application域：  在服务运行期间共享数据
         */
        model.addAttribute("response" , responseVo);
        model.addAttribute("searchParam" , queryParamVo);
        return "search";
    }



    //测试thymeleaf的语法：在域中存数据 在页面中获取展示
    //数据的共享：转发 使用request域共享数据
    @GetMapping("thymeleaf")
    public String testThymeleaf(Model model , HttpSession session){
        List<AttrEntity> list = new ArrayList<>();
        //准备测试数据
        for (int i = 0; i < 10; i++) {
            AttrEntity attrEntity = new AttrEntity();
            attrEntity.setId((long) i);
            attrEntity.setName("attr"+i);
            attrEntity.setIcon("aaa"+i+".jpg");
            list.add(attrEntity);
        }
        model.addAttribute("attrs" , list);
        model.addAttribute("attr" , list.get(0));
        session.setAttribute("sessionAttrs" , list);
        return "hello";
    }

}
